package com.innerclass;

public class AnonymousInnerClassDetail {
    public static void main(String[] args) {
        Outer05 outer05 = new Outer05();
        outer05.f1();

        System.out.println("Outer05.this.hash code = " + outer05);
    }
}

class Outer05 {
    private int n1 = 99;
    public void f1() {

        //不能添加访问修饰符，因为就是一个局部变量
        Person person = new Person() {
            @Override
            public void hi() {
                //可以直接访问外部类所有成员包括私有的
                //如果同名遵循就近原则
                //如果要调用同名的外部的变量，加上(外部类名.this.成员)
                int n1 = 33;
                System.out.println("匿名内部类重写了 hi 方法 n1= " + n1 + "  \n外部类的n1=" + Outer05.this.n1);
                System.out.println("Outer05.this.hash code = " + Outer05.this);

            }
        };

        person.hi();

        //也可以直接调用，匿名类内部本身也是返回对象
        //class 匿名内部类 extends Person{}
//        new Person() {
//            @Override
//            public void hi() {
//                System.out.println("匿名内部类重写了 hi 方法");
//            }
//
//            @Override
//            public void ok(String str) {
//                super.ok(str);
//            }
//
//        }.ok("eeee");
    }
}

class Person {
    public void hi() {
        System.out.println("Person hi()");
    }

    public void ok(String str) {
        System.out.println("Person()ok+" + str);
    }
}


//抽象类/接口